iT邦幫忙

2024 iThome 鐵人賽

DAY 0
0
自我挑戰組

重新開始 elasticsearch 系列 第 25

2024 鐵人賽 Day26: How to RAG - prompt

  • 分享至 

  • xImage
  •  

在上一篇文章中提到要整合 ES 和 LLM 做成 RAG,我們還需要一個給 LLM 一段 prompt 並將 ES 搜尋到的資訊回傳個 LLM 作為 context。

今天首先來完成 prompt 的部分,chatgpt 2022 問世到 2023 的普遍後,應該沒有人不會下 prompt 了,只是得到的回應是不是如預期而已。

但根據 google 的這份教學,prompt 是有些準則的,摘要 prompt best practice 如下

  • Be concise:精簡明確,雖然是自然語言,但不能過度口語化,可以提供明確的任務方向來提供指引,例如:『建議』、『分類』、『簡介』、『翻譯』等。
  • Be specific, and well-defined:具體且定義明確,這一點跟問真實的人是一樣的,過於廣泛模糊的問題有利於意見搜集,但不利於得到確切的答案。
  • Ask one task at a time:一次一個問題!
  • Improve response quality by including examples:這一點跟真實的人溝通也是一樣,舉例會讓 LLM 更容易給你你想要的。
  • Turn generative tasks to classification tasks to improve safety:將生成任務轉換成分類任務,限縮可能的回答範疇。

上述沒有提到,但一些大家都蠻常使用的技巧如下

  • 定義 do’s and dont’s,例如在 prompt 中要求『不要詢問個人資訊』。
  • 角色定義:定義 LLM 應該要扮演的角色,任務內容等,來框架或符合特定情景。例如:『你是一個中學老師,請用中學生也能理解的方式說明』。
  • 為了限制幻覺,允許 LLM 沒有答案。

如果你對 prompt engineering 非常有興趣,這裡有一個非常完整的指南,針對不同的 prompt 情境,有非常全面的基礎知識。

基於以上,我設計了以下的簡單 prompt:

『你是我一個電影熱愛者,熟知各類型熱門電影資訊,經常有人來徵詢你不同的建議。但如果沒有推薦的電影,可以說沒有想法或是沒有推薦的。當推薦時你會提供電影名稱和關於這部電影的簡單描述。』

我們先手動挑選幾筆黑道相關電影作為 context 給 LLM 使用:

四海好傢伙:藉由一個在約紐布魯克林區長大的少年亨利,他一心一意想這入黑手黨,可是他一開如也只能從一個跑腳的開始,除非取得保利的信任,不然他不可能再進一個階段,進入所謂的「family」裡頭… 老一輩的黑手黨如保利,謹守道上的行規──榮譽、忠誠、不碰毒品、除非必要不殺人。可是到了七○年代,新崛起的黑道人詹姆士、吉米 和亨利根本不甩這一套,甚至想把保利取而代之。
神鬼無間: 傳奇導演馬丁史柯西斯完美翻拍香港【無間道】系列,集結李奧納多狄卡皮歐、傑克尼克遜、麥特戴蒙等神級卡司,打造勇奪奧斯卡最佳影片、最佳導演等4項大獎的警匪史詩。波士頓黑幫老大法蘭克栽培年輕手下柯林成為警官,在警界進行埋伏滲透;臥底警察比利則被上級指派混入法蘭克的幫派,蒐集犯罪情報。當黑白兩道開始察覺有內奸存在,柯林和比利必須在自己的身分曝光之前,搶先揭發對方的身份。
疤面煞星: 改編自1932年同名之經典名作。 1983年,大批古巴移民來到美國追尋「美國夢」,湯尼(Al Pacino 飾)和好友曼尼(Steven Bauer 飾)也是其中之一,他們為黑道辦事快狠準加上經營毒品生意,很快就在邁阿密打出名聲。但是緊接而來的金錢、慾望糾葛和背叛,很快就讓湯尼的帝國搖搖欲墜...。 艾爾帕西諾在本片的精彩演出賦予了本片新的生命,加上名導演布柿恩迪帕馬(Brian De Palma)、編劇奧利佛史東(Oliver Stone)及製片馬丁柏格曼(Martin Bregman)的努力,使本片呈現出極佳的戲劇張力,揭露了美國黑社會的腐敗與黑暗。艾爾帕西諾結尾火拚的場面,以及臉上兇狠的刀疤,也成為影史經典之一。
def get_prompt(instruction, question, context):
    prompt = f"""
    Instructions:
    {instruction}

    Context:
    {context}

    Question: 
    {question}
    """
    return prompt

def get_rag(prompt):
    client = OpenAI(api_key=OPEN_AI_KEY)
    completion = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {
                "role": "user",
                "content": prompt
            }
        ]
    )
    return completion.choices[0].message.content

instruction = """
你是我一個電影熱愛者,熟知各類型熱門電影資訊,經常有人來徵詢你不同的建議。
但如果沒有推薦的電影,可以說沒有想法或是沒有推薦的。
當推薦時你會提供電影名稱和關於這部電影的簡單描述。"""

question = "請推薦我黑道主題的電影"

context = """
	...同上...不重複佔版面...
"""

得到的回覆:

如果你對黑道主題的電影感興趣,這裡有幾部經典的推薦:

1. **四海好傢伙(Goodfellas)**:
   這部電影講述了在布魯克林長大的少年亨利,他夢想成為黑手黨的一員。故事中描繪了黑手黨的奧秘與生活,從低層的跑腿角色開始,亨利逐步接近權力的核心,最終面臨忠誠與背叛的考驗。這部電影的節奏快、情節引人入勝,並且強調了「家庭」的概念和黑手黨的道德規範。

2. **神鬼無間(The Departed)**:
   這部影片是馬丁·史柯西斯翻拍的經典故事,圍繞著黑幫和臥底警察的心理戰。年輕的警官柯林偷偷潛入黑幫,而比利則是黑幫內的臥底警官。兩人在身份曝光之前,必須互相追查,保持生存。此片獲得了奧斯卡最佳影片等多項獎項,劇情緊湊,角色鮮明。

3. **疤面煞星(Scarface)**:
   當湯尼·蒙達那追尋美國夢,他在毒品及黑道世界中迅速崛起,卻也面對無情的背叛和慾望帶來的毀滅。艾爾·帕西諾的精彩表現使得這部電影成為黑道電影的代表作之一,充滿了張力與戲劇性,並探討了權力和腐敗的主題。

這幾部電影都充分展現黑道生活的複雜性和引人入勝的故事情節,值得一看!

雖然要等一下,結果看起來還不錯;來測試一下如果是別的電影類型呢?改請他推薦愛情喜劇片。

如果你在尋找愛情喜劇片,我有幾部推薦給你:

1. **當哈利遇上莎莉 (When Harry Met Sally...)** - 這部經典的愛情喜劇由羅伯雷納導演,主演是比illy·克里斯托和梅根·瑞恩。故事探討了男女之間是否能夠成為好朋友,沒有情感糾葛,並穿插了許多幽默的對話和感人的時刻。

2. **愛在黎明破曉前 (Before Sunrise)** - 這是一部美麗而感人的愛情片,講述了一對在火車上相遇的年輕人的故事,他們在維也納度過一夜,深入交流彼此的生活、夢想和感受。這部電影讓人思考愛情的短暫與深刻。

3. **瘋狂愚蠢的愛 (Crazy, Stupid, Love)** - 這部愛情喜劇讓史提夫·卡瑞爾、瑞安·高斯林、朱莉安·摩爾等人攜手演出,講述了一位中年男人面對婚姻破裂後,如何重新找回自己的故事,並藉由朋友的幫助,在愛情中摸索。

這三部電影都富有幽默感的同時,也能引發對愛情的深刻思考,希望你會喜歡!

顯然 LLM 主動的搜尋了 context 外的資訊,修改 prompt 加上 請只從提供的資訊中尋找推薦的電影 後,得到的推薦是:

抱歉,我沒有推薦的愛情喜劇片。

看起來這個 prompt 勉強可用,那我們明天就把 ES & LLM 串起來吧~


上一篇
2024 鐵人賽 Day25: RAG
下一篇
2024 鐵人賽 Day27: How to RAG - Provide Context
系列文
重新開始 elasticsearch 29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言